财务报表 内容 概述 账簿定义 数据库相关 视图相关 Report Cube Reporting Hierarchy 源码 余额汇总 概述 http://wiki.idempiere.org/en/Accounting_Tables 财务常见报表 总分类账示例(竖式) 账簿定义 iDempiere可以按照国外习惯,只设一级科目。或者按照国内习惯,使用多级科目。 按总帐科目设置的帐簿,应叫总帐或总分类帐。 按明细科目设置的帐簿是明细帐或明细分类帐。 日记帐是指按时间顺序每日逐笔登记的帐簿。 总帐按一级会计科目设置;明细帐按二级会计科目设置;日记帐记录二级会计科目下明细。 日记账:亦称序时账,是按经济业务发生时间的先后顺序,逐日逐笔登记的账簿。 总分类账户 总分类账户简称总账账户或总账,是指根据总分类科目设置的,用于对会计要素具体内容进行总括分类核算的账户。 明细分类账户 明细分类账户简称明细账。是根据明细分类科目设置的,用来对会计要素具体内容进行明细分类核算的账户。 辅助账簿,也称备查簿,是为备忘备查而设置的。在会计实务中主要包括各种租借设备、物资的辅助登记或有关应收、应付款项的备查簿,担保、抵押备查簿等。各单位可根据自身管理的需要,设置其他辅助账。 数据库相关 select tablename, a.name , isview from ad_table where UPPER(tablename) ~ '^GL|FACT|REPORTSTATEMENT|TRIALBALANCE' and isactive='Y' ORDER BY 1 几个关键的表 Fact_Acct Accounting Fact 分录 Fact_Acct_Balance Fact_Acct_Balance 分录发生额(视图) Fact_Acct_Summary Accounting Fact summary 分录汇总 视图相关 关键视图:Fact_Acct_Balance,分录发生额 RV_Fact_Acct Accounting Fact View 分录明细 RV_Fact_Acct_Day Fact Acct Day 分录日明细 RV_Fact_Acct_Period Fact Acct Period 分录期间明细 RV_Fact_Simple Simple Fact View 分录简单视图 T_ReportStatement T_ReportStatement 账户状况表 T_TrialBalance Trial Balance 试算平衡表 如果是从fact_acct(分录明细表)直接汇总生成报表的话,肯定无法接受。所以Fact_Acct_Balance这个视图就出现了,其记录分录的每日余额以加快报表的计算,但其70%的原始数据,远远达不到减少计算的效果。且每次计算报表前,还要更新这个用处不大的余额表,这导致了直接从fact_acct表出财务报告非常慢。 1. id的财务数据模型是:分录--报表(明细账,总账) 2. 由于分录只有发生额,凡是涉及到期初、期末数据的报表都需要单独做视图或者使用报表工具完成 3. id中的”账户状态表“相当于于分类明细账(三栏式) Report Cube 关键表:Fact_Acct_Summary,按选择的维度分组,汇总分录 如果预计算能够使报表计算减少到5%,那将是非常可观的。期间是一个很重要的统计分组方法。另外,客户也不会总是全维度统计(电脑的噩梦),这样report cube(报表维度集)就出现了,它可以让客户选择需要的统计维度以减少分录的计算工作。 注意:会计日历是必须的,这让iDempiere可以提供多个日历的财务报表。Report Cube(报表维度集)可以随时计算(Recalculate cube),这样出报表就快了。 Reporting Hierarchy 账户段比如组织、科目、产品可能有多个组合来存放不同的商业视角,Reporting Hierarchy(组合报表)允许你选择不同的层次/树(账户段)来产生报表。 源码 类名称: org.compiere.report.FinStatement(待确认,我无法在bitbucket找到源码) 表名称: T_ReportStatement 从Report界面的布局可以看出“单个维度”--“Reporting Hierarchy(组合报表)”--“Report Cube(报表维度集)”三者的关系。 余额汇总 https://groups.google.com/d/msg/idempiere/UeUD8kec4xA/_PJL-XLnHloJ We implemented our solution: 1. creating a new SQL table (from the fact_acct adding some fields to store transaction sub-total and account subtotals) 2. calculation process using a sql function) 3. next we created a process that trigger the function for the range of date & accounts (to improved performance 4. and after that the same process trigger a print format as described in prevoiews messages, because our customer didn´t need the info in real time, the data was not too big, and de results (totals per bpartner per account) were good enought for him. Here the SQL function & table definitions, if you or someone else want to re-use them. Regards Pedro R